home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Arsenal Files 8
/
The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO
/
g_quake
/
server~1.zip
/
_RANDOM.QC
< prev
next >
Wrap
Text File
|
1996-10-04
|
7KB
|
186 lines
/*
**
** _random.qc (Random Code, 1.0)
**
** Copyright (C) 1996 Johannes Plass
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
** Author: Johannes Plass (plass@dipmza.physik.uni-mainz.de)
**
*/
//========================================================================
// Defaults
//========================================================================
// To change the effect of randomization have a look at the function
// 'RandomInitItem' below.
//========================================================================
// RandomInfo
//========================================================================
void(entity player) RandomInfo =
{
if (!USE_MODULE_RANDOM) return;
};
//========================================================================
// RandomInit
//========================================================================
void(entity player) RandomInit =
{
if (!USE_MODULE_RANDOM) return;
};
//========================================================================
// RandomActiveMessage
//========================================================================
void(entity player) RandomActiveMessage =
{
if (!USE_MODULE_RANDOM) return;
// 123456789#123456789#123456789#12345678
sprint(player," Random\n");
};
//========================================================================
// RandomInitItem
//
// Identify an item as element of one of the groups AMMO, WEAPON, POWERUP
// by setting one of the flags RANDOM_TYPE_ITEM, RANDOM_TYPE_WEAPON,
// RANDOM_TYPE_POWERUP.
// Since only objects within the same group are mixed changing these
// flag assigniments is an easy way to change the effect randomization.
//========================================================================
float RANDOM_TYPE_AMMO = 256;
float RANDOM_TYPE_WEAPON = 512;
float RANDOM_TYPE_POWERUP = 1024;
void() RandomInitItem =
{
local float f, t;
if (!(self.flags & FL_ITEM)) return;
f = 0;
if (self.touch == health_touch) {
if (self.mdl == "maps/b_bh10.bsp") f = RANDOM_TYPE_AMMO + 1;
else if (self.mdl == "maps/b_bh25.bsp") f = RANDOM_TYPE_AMMO + 2;
else if (self.mdl == "maps/b_bh100.bsp") f = RANDOM_TYPE_POWERUP + 3;
} else if (self.touch == ammo_touch) {
if (self.mdl == "maps/b_shell0.bsp") f = RANDOM_TYPE_AMMO + 4;
else if (self.mdl == "maps/b_shell1.bsp") f = RANDOM_TYPE_AMMO + 5;
else if (self.mdl == "maps/b_nail0.bsp") f = RANDOM_TYPE_AMMO + 6;
else if (self.mdl == "maps/b_nail1.bsp") f = RANDOM_TYPE_AMMO + 7;
else if (self.mdl == "maps/b_rock0.bsp") f = RANDOM_TYPE_AMMO + 8;
else if (self.mdl == "maps/b_rock1.bsp") f = RANDOM_TYPE_AMMO + 9;
else if (self.mdl == "maps/b_batt0.bsp") f = RANDOM_TYPE_AMMO + 10;
else if (self.mdl == "maps/b_batt1.bsp") f = RANDOM_TYPE_AMMO + 11;
} else if (self.touch == weapon_touch) {
if (self.mdl == "progs/g_shot.mdl") f = RANDOM_TYPE_WEAPON + 12;
else if (self.mdl == "progs/g_nail.mdl") f = RANDOM_TYPE_WEAPON + 13;
else if (self.mdl == "progs/g_nail2.mdl") f = RANDOM_TYPE_WEAPON + 14;
else if (self.mdl == "progs/g_rock.mdl") f = RANDOM_TYPE_WEAPON + 15;
else if (self.mdl == "progs/g_rock2.mdl") f = RANDOM_TYPE_WEAPON + 16;
else if (self.mdl == "progs/g_light.mdl") f = RANDOM_TYPE_WEAPON + 17;
} else if (self.touch == powerup_touch) {
if (self.mdl == "progs/quaddama.mdl") f = RANDOM_TYPE_POWERUP + 18;
else if (self.mdl == "progs/invulner.mdl") f = RANDOM_TYPE_POWERUP + 19;
else if (self.mdl == "progs/invisibl.mdl") f = RANDOM_TYPE_POWERUP + 20;
// don't randomize biosuit
// else if (self.mdl == "progs/suit.mdl") f = RANDOM_TYPE_POWERUP + 21;
} else if (self.touch == armor_touch) {
if (self.mdl == "progs/armor.mdl") f = RANDOM_TYPE_POWERUP + 22;
}
if (f) {
self.random_type = f;
self.random_offset = self.origin - (self.absmin + '31 31 0');
}
};
//========================================================================
// RandomSetOrigin
//========================================================================
void(entity item) RandomSetOrigin =
{
local entity e,targ;
local vector orig;
local float u,t,cont;
//dprint("RandomSetOrigin\n");
e = item;
cont = 1;
while (cont) {
e = nextent(e);
if (e.random_type) {
if (e.solid == SOLID_NOT) {
if ((e.random_type & item.random_type) > 255) {
if (e.random_type != item.random_type) {
if (e.random_used <= item.random_used) {
if (e.random_time + 10 < time) {
if (e.random_used < item.random_used) cont = 0;
else { if (random() > 0.5) cont = 0; }
}
}
}
}
}
}
if (e == item) cont = 0;
}
targ = e;
//dprint("Placing: ");
//dprint(item.netname); dprint(" "); dprint(item.classname); dprint("\n");
//dprint(" typ="); dprint(ftos(item.random_type)); dprint(" ");
//dprint("old="); dprint(vtos(item.origin)); dprint(" ");
if (item != targ) {
u = targ.random_used;
t = targ.random_time;
orig = targ.origin - targ.random_offset;
targ.origin = item.origin - item.random_offset + targ.random_offset;
targ.random_used = item.random_used;
targ.random_time = item.random_time;
item.origin = orig + item.random_offset;
item.random_used = u;
item.random_time = t;
}
//dprint("new="); dprint(vtos(item.origin)); dprint(" ");
//dprint("\n");
};
//========================================================================
// RandomUpdateItem
//========================================================================
void() RandomUpdateItem = {
// called when an item is picked up
self.random_used = self.random_used + 1;
self.random_time = time;
};